/**
 * 将模板编译成渲染函数分成两个步骤, 先将模板解析成AST（抽象语法树），然后在使用AST生成渲染函数。
 * 由于静态节点不需要总是重复渲染，所以在生成AST之后生成渲染函数之前阶段，需要做一个操作，那就是遍历一遍AST，
 * 给静态节点做一个标记，这样在虚拟DOM更新节点时候，发现节点上有这个标记就不会重新渲染它。
 * 
 * 大体逻辑上，模板编译分三部分内容：
 * 1)将模板解析为AST     使用解析器来实现
 * 2)遍历AST静态节点     使用优化器来实现
 * 3)使用AST生成渲染函数  使用代码生成器来实现
 */